package com.xinyue.system.model;

import com.alibaba.fastjson2.annotation.JSONField;
import com.xinyue.system.domain.SysUser;
import java.util.Collection;
import java.util.Set;
import org.springframework.security.core.GrantedAuthority;
import org.springframework.security.core.userdetails.UserDetails;

/**
 * 登录用户身份权限
 *
 * @author ruoyi
 */
public class LoginUser implements UserDetails {

  private static final long serialVersionUID = 1L;

  /**
   * 用户ID
   */
  private Long userId;

  /**
   * 部门ID
   */
  private Long deptId;

  /**
   * 用户唯一标识
   */
  private String token;

  /**
   * 登录时间
   */
  private Long loginTime;

  /**
   * 过期时间
   */
  private Long expireTime;

  /**
   * 登录IP地址
   */
  private String ipaddr;

  /**
   * 登录地点
   */
  private String loginLocation;

  /**
   * 浏览器类型
   */
  private String browser;

  /**
   * 操作系统
   */
  private String os;

  /**
   * 权限列表
   */
  private Set<String> permissions;

  /**
   * 用户信息
   */
  private SysUser user;

  public LoginUser() {
  }

  public LoginUser(SysUser user, Set<String> permissions) {
    this.user = user;
    this.permissions = permissions;
  }

  public LoginUser(Long userId, Long deptId, SysUser user, Set<String> permissions) {
    this.userId = userId;
    this.deptId = deptId;
    this.user = user;
    this.permissions = permissions;
  }

  public Long getUserId() {
    return userId;
  }

  public void setUserId(Long userId) {
    this.userId = userId;
  }

  public Long getDeptId() {
    return deptId;
  }

  public void setDeptId(Long deptId) {
    this.deptId = deptId;
  }

  public String getToken() {
    return token;
  }

  public void setToken(String token) {
    this.token = token;
  }

  @JSONField(serialize = false)
  @Override
  public String getPassword() {
    return user.getPassword();
  }

  @Override
  public String getUsername() {
    return user.getUserName();
  }

  /**
   * 账户是否未过期,过期无法验证
   */
  @JSONField(serialize = false)
  @Override
  public boolean isAccountNonExpired() {
    return true;
  }

  /**
   * 指定用户是否解锁,锁定的用户无法进行身份验证
   *
   * @return
   */
  @JSONField(serialize = false)
  @Override
  public boolean isAccountNonLocked() {
    return true;
  }

  /**
   * 指示是否已过期的用户的凭据(密码),过期的凭据防止认证
   *
   * @return
   */
  @JSONField(serialize = false)
  @Override
  public boolean isCredentialsNonExpired() {
    return true;
  }

  /**
   * 是否可用 ,禁用的用户不能身份验证
   *
   * @return
   */
  @JSONField(serialize = false)
  @Override
  public boolean isEnabled() {
    return true;
  }

  public Long getLoginTime() {
    return loginTime;
  }

  public void setLoginTime(Long loginTime) {
    this.loginTime = loginTime;
  }

  public String getIpaddr() {
    return ipaddr;
  }

  public void setIpaddr(String ipaddr) {
    this.ipaddr = ipaddr;
  }

  public String getLoginLocation() {
    return loginLocation;
  }

  public void setLoginLocation(String loginLocation) {
    this.loginLocation = loginLocation;
  }

  public String getBrowser() {
    return browser;
  }

  public void setBrowser(String browser) {
    this.browser = browser;
  }

  public String getOs() {
    return os;
  }

  public void setOs(String os) {
    this.os = os;
  }

  public Long getExpireTime() {
    return expireTime;
  }

  public void setExpireTime(Long expireTime) {
    this.expireTime = expireTime;
  }

  public Set<String> getPermissions() {
    return permissions;
  }

  public void setPermissions(Set<String> permissions) {
    this.permissions = permissions;
  }

  public SysUser getUser() {
    return user;
  }

  public void setUser(SysUser user) {
    this.user = user;
  }

  @Override
  public Collection<? extends GrantedAuthority> getAuthorities() {
    return null;
  }
}
